package com.data.center.util;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class CalculateUtils<T> {

    /*
     * 求两个链表的交集
     * */
    public List<T> getIntersection(List<T> first, List<T> second) {
        List<T> result = new ArrayList<>();

        for (T item : first) {
            if (second.contains(item)) {
                result.add(item);
            }
        }

        return result;
    }

    /*
     * 求两个链表的并集
     */
    public List<T> getUnion(List<T> first, List<T> second) {
        Set<T> resultSet = new HashSet<>();

        // 将第一个列表的元素添加到结果集
        resultSet.addAll(first);
        // 将第二个列表的元素添加到结果集
        resultSet.addAll(second);

        return new ArrayList<>(resultSet);
    }

    /*
     * 两个链表是否相等
     */
    public boolean equals(List<T> first, List<T> second) {
//        if ((first == second) || (first == null && second.isEmpty() || (second == null && first.isEmpty()))) {
//            return true;
//        }
//        int sameSize = this.getIntersection(first, second).size();
//        return (sameSize == first.size()) && (sameSize == second.size());
        if (first == second) {
            return true;
        }

        if (first == null || second == null) {
            return false;
        }

        if (first.size() != second.size()) {
            return false;
        }

        // 利用集合的 containsAll 方法来判断两个列表是否相等
        return first.containsAll(second);
    }

    /*
     * 求第一个链表代表的集合减去第二个链表代表的集合的计算结果
     * */
    public List<T> firstMinusSecond(List<T> first, List<T> second) {
        List<T> result = new ArrayList<>(first);

        for (T item : second) {
            result.remove(item);
        }

        return result;
    }


}
